
    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using ADL;
    using ADL.ProyectosTableAdapters;
    using AEL.APU;
    using BEL;
    
    namespace CEL.APU
    {
    /// <summary>
    /// Acceso a la base de datos
    /// Modulo:Proyectos 
    /// Tabla:Apu_Proyecto
    /// </summary>
    public class DO_Apu_Proyecto
    {
    #region Adapter
    private Apu_ProyectoTableAdapter _Adapter;
    /// <summary>
    /// Acceso al Table Adapter de la capa ADL
    /// </summary>
    public Apu_ProyectoTableAdapter Adapter
    {
    get
    {
    if (_Adapter == null)
    _Adapter = new Apu_ProyectoTableAdapter();
     return _Adapter;
     }
     }
    #endregion
    #region Obtención de datos
    //Obtencion de datos
    /// <summary>
    /// Obtiene todos los datos de la tabla Apu_Proyecto
    /// </summary> 
    /// <returns>Lista de objetos Apu_Proyecto</returns> 
    public List <Apu_Proyecto> Get ( Scope s )
    {
    string llamada = "";
    List <Apu_Proyecto> lista= new List <Apu_Proyecto> ();
    //Extrae los datos
    if(s != null)
    {
    Proyectos.Apu_ProyectoDataTable tabla = 
    Adapter.Get (s.Ver_Version_Id);
    //Cuenta  el número  de registros de la tabla
    int numeroRegistros = tabla.Count;
    llamada = "Nombre del Método Utilizado: Get "  + "Parametros  Enviados en el Método: s "  + " Nombre del Store Procedure: " + " Apu_Proyecto_Get "+ " Número de Registros: " + numeroRegistros;
    //Carga en la lista
      foreach (Proyectos.Apu_ProyectoRow fila in tabla)
      lista.Add(new Apu_Proyecto(
      
    fila.Id,
    fila.Codigo,
    fila.Nombre,
    fila.Estado,
    fila.Apu_Lugar_Id,
    fila.Fecha_Inicio,
    fila.Fecha_Final,
    fila.Numero_Contrato,
    fila.Referencia_Contrato,
    fila.Destino_Obra,
    fila.Int_Moneda_Id,
    fila.Int_Sucursal_Id,
    fila.Apu_Tipo_Proyecto_Id,
    fila.Int_Partida_Presupuestaria_Id,
    fila.Tipo,
    fila.Empresa_Contratada,
    fila.Espresa_Fiscalizadora,
    fila.Fecha_Creacion,
    fila.Creacion_Per_Personal_Id,
    fila.Fecha_Update,
    fila.Update_Per_Personal_Id,
    fila.Descripcion,
    fila.Apu_Lugar_Codigo,
    fila.Apu_Lugar_Nombre,
    fila.Apu_Provincia_Id,
    fila.Apu_Provincia_Nombre,
    fila.Int_Empresa_Id,
    fila.Int_Empresa_Codigo,
    fila.Int_Empresa_Nombre,
    fila.Int_Moneda_Simbolo,
    fila.Int_Partida_Presupuestaria_Valor,
    fila.Presupuesto_Costo,
    fila.Ejecucion_Costo,
    fila.Apu_Tipo_Proyecto_Codigo,
    fila.Apu_Tipo_Proyecto_Nombre,
    fila.Apu_Proyecto_Personal_Id,
    fila.Tipo_Nombre,
    fila.Estado_Nombre));
      }
      //Devuleve la Lista
      return lista;
      }
      public List <Apu_Proyecto> GetByCodigo( Scope s , string codigo)
          {
          string llamada = "";
          List <Apu_Proyecto> lista= new List <Apu_Proyecto> ();
          //Extrae los datos
          if(s != null)
          {
          Proyectos.Apu_ProyectoDataTable tabla = 
          Adapter.GetByCodigo(s.Ver_Version_Id, codigo);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetByCodigo" + " Parametros  Enviados en el Método: "+ "," + " s.Ver_Version_Id : " + s.Ver_Version_Id+ "," + " codigo : " + codigo  + " Nombre del Store Procedure: " + "dbo.Apu_Proyecto_ByCodigo " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Proyectos.Apu_ProyectoRow fila in tabla)
          lista.Add(new Apu_Proyecto(
          
    fila.Id,
    fila.Codigo,
    fila.Nombre,
    fila.Estado,
    fila.Apu_Lugar_Id,
    fila.Fecha_Inicio,
    fila.Fecha_Final,
    fila.Numero_Contrato,
    fila.Referencia_Contrato,
    fila.Destino_Obra,
    fila.Int_Moneda_Id,
    fila.Int_Sucursal_Id,
    fila.Apu_Tipo_Proyecto_Id,
    fila.Int_Partida_Presupuestaria_Id,
    fila.Tipo,
    fila.Empresa_Contratada,
    fila.Espresa_Fiscalizadora,
    fila.Fecha_Creacion,
    fila.Creacion_Per_Personal_Id,
    fila.Fecha_Update,
    fila.Update_Per_Personal_Id,
    fila.Descripcion,
    fila.Apu_Lugar_Codigo,
    fila.Apu_Lugar_Nombre,
    fila.Apu_Provincia_Id,
    fila.Apu_Provincia_Nombre,
    fila.Int_Empresa_Id,
    fila.Int_Empresa_Codigo,
    fila.Int_Empresa_Nombre,
    fila.Int_Moneda_Simbolo,
    fila.Int_Partida_Presupuestaria_Valor,
    fila.Presupuesto_Costo,
    fila.Ejecucion_Costo,
    fila.Apu_Tipo_Proyecto_Codigo,
    fila.Apu_Tipo_Proyecto_Nombre,
    fila.Apu_Proyecto_Personal_Id,
    fila.Tipo_Nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
          public List <Apu_Proyecto> GetByEmpresa( Scope s , string Int_Empresa_Id)
          {
          string llamada = "";
          List <Apu_Proyecto> lista= new List <Apu_Proyecto> ();
          //Extrae los datos
          if(s != null)
          {
          Proyectos.Apu_ProyectoDataTable tabla = 
          Adapter.GetByEmpresa(s.Ver_Version_Id, s.Int_Empresa_Id);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetByEmpresa" + " Parametros  Enviados en el Método: " + "," + " s.Ver_Version_Id : " + s.Ver_Version_Id + "," + " Int_Empresa_Id : " + s.Int_Empresa_Id + " Nombre del Store Procedure: " + "dbo.Apu_Proyecto_ByEmpresa " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Proyectos.Apu_ProyectoRow fila in tabla)
          lista.Add(new Apu_Proyecto(
          
    fila.Id,
    fila.Codigo,
    fila.Nombre,
    fila.Estado,
    fila.Apu_Lugar_Id,
    fila.Fecha_Inicio,
    fila.Fecha_Final,
    fila.Numero_Contrato,
    fila.Referencia_Contrato,
    fila.Destino_Obra,
    fila.Int_Moneda_Id,
    fila.Int_Sucursal_Id,
    fila.Apu_Tipo_Proyecto_Id,
    fila.Int_Partida_Presupuestaria_Id,
    fila.Tipo,
    fila.Empresa_Contratada,
    fila.Espresa_Fiscalizadora,
    fila.Fecha_Creacion,
    fila.Creacion_Per_Personal_Id,
    fila.Fecha_Update,
    fila.Update_Per_Personal_Id,
    fila.Descripcion,
    fila.Apu_Lugar_Codigo,
    fila.Apu_Lugar_Nombre,
    fila.Apu_Provincia_Id,
    fila.Apu_Provincia_Nombre,
    fila.Int_Empresa_Id,
    fila.Int_Empresa_Codigo,
    fila.Int_Empresa_Nombre,
    fila.Int_Moneda_Simbolo,
    fila.Int_Partida_Presupuestaria_Valor,
    fila.Presupuesto_Costo,
    fila.Ejecucion_Costo,
    fila.Apu_Tipo_Proyecto_Codigo,
    fila.Apu_Tipo_Proyecto_Nombre,
    fila.Apu_Proyecto_Personal_Id,
    fila.Tipo_Nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
          public List <Apu_Proyecto> GetById( Scope s , string id)
          {
          string llamada = "";
          List <Apu_Proyecto> lista= new List <Apu_Proyecto> ();
          //Extrae los datos
          if(s != null)
          {
          Proyectos.Apu_ProyectoDataTable tabla = 
          Adapter.GetById(s.Ver_Version_Id, id);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetById" + " Parametros  Enviados en el Método: "+ "," + " s.Ver_Version_Id : " + s.Ver_Version_Id+ "," + " id : " + id  + " Nombre del Store Procedure: " + "dbo.Apu_Proyecto_ById " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Proyectos.Apu_ProyectoRow fila in tabla)
          lista.Add(new Apu_Proyecto(
          
    fila.Id,
    fila.Codigo,
    fila.Nombre,
    fila.Estado,
    fila.Apu_Lugar_Id,
    fila.Fecha_Inicio,
    fila.Fecha_Final,
    fila.Numero_Contrato,
    fila.Referencia_Contrato,
    fila.Destino_Obra,
    fila.Int_Moneda_Id,
    fila.Int_Sucursal_Id,
    fila.Apu_Tipo_Proyecto_Id,
    fila.Int_Partida_Presupuestaria_Id,
    fila.Tipo,
    fila.Empresa_Contratada,
    fila.Espresa_Fiscalizadora,
    fila.Fecha_Creacion,
    fila.Creacion_Per_Personal_Id,
    fila.Fecha_Update,
    fila.Update_Per_Personal_Id,
    fila.Descripcion,
    fila.Apu_Lugar_Codigo,
    fila.Apu_Lugar_Nombre,
    fila.Apu_Provincia_Id,
    fila.Apu_Provincia_Nombre,
    fila.Int_Empresa_Id,
    fila.Int_Empresa_Codigo,
    fila.Int_Empresa_Nombre,
    fila.Int_Moneda_Simbolo,
    fila.Int_Partida_Presupuestaria_Valor,
    fila.Presupuesto_Costo,
    fila.Ejecucion_Costo,
    fila.Apu_Tipo_Proyecto_Codigo,
    fila.Apu_Tipo_Proyecto_Nombre,
    fila.Apu_Proyecto_Personal_Id,
    fila.Tipo_Nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
          public List <Apu_Proyecto> GetByLikeNombre( Scope s , string Nombre)
          {
          string llamada = "";
          List <Apu_Proyecto> lista= new List <Apu_Proyecto> ();
          //Extrae los datos
          if(s != null)
          {
          Proyectos.Apu_ProyectoDataTable tabla = 
          Adapter.GetByLikeNombre(s.Ver_Version_Id, Nombre);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetByLikeNombre" + " Parametros  Enviados en el Método: "+ "," + " s.Ver_Version_Id : " + s.Ver_Version_Id+ "," + " Nombre : " + Nombre  + " Nombre del Store Procedure: " + "dbo.Apu_Proyecto_ByLikeNombre " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Proyectos.Apu_ProyectoRow fila in tabla)
          lista.Add(new Apu_Proyecto(
          
    fila.Id,
    fila.Codigo,
    fila.Nombre,
    fila.Estado,
    fila.Apu_Lugar_Id,
    fila.Fecha_Inicio,
    fila.Fecha_Final,
    fila.Numero_Contrato,
    fila.Referencia_Contrato,
    fila.Destino_Obra,
    fila.Int_Moneda_Id,
    fila.Int_Sucursal_Id,
    fila.Apu_Tipo_Proyecto_Id,
    fila.Int_Partida_Presupuestaria_Id,
    fila.Tipo,
    fila.Empresa_Contratada,
    fila.Espresa_Fiscalizadora,
    fila.Fecha_Creacion,
    fila.Creacion_Per_Personal_Id,
    fila.Fecha_Update,
    fila.Update_Per_Personal_Id,
    fila.Descripcion,
    fila.Apu_Lugar_Codigo,
    fila.Apu_Lugar_Nombre,
    fila.Apu_Provincia_Id,
    fila.Apu_Provincia_Nombre,
    fila.Int_Empresa_Id,
    fila.Int_Empresa_Codigo,
    fila.Int_Empresa_Nombre,
    fila.Int_Moneda_Simbolo,
    fila.Int_Partida_Presupuestaria_Valor,
    fila.Presupuesto_Costo,
    fila.Ejecucion_Costo,
    fila.Apu_Tipo_Proyecto_Codigo,
    fila.Apu_Tipo_Proyecto_Nombre,
    fila.Apu_Proyecto_Personal_Id,
    fila.Tipo_Nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
          public List <Apu_Proyecto> GetByPersonal( Scope s , string Per_Personal_Id)
          {
          string llamada = "";
          List <Apu_Proyecto> lista= new List <Apu_Proyecto> ();
          //Extrae los datos
          if(s != null)
          {
          Proyectos.Apu_ProyectoDataTable tabla = 
          Adapter.GetByPersonal(s.Ver_Version_Id, s.Per_Personal_Id);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetByPersonal" + " Parametros  Enviados en el Método: " + "," + " s.Ver_Version_Id : " + s.Ver_Version_Id + "," + " Per_Personal_Id : " + s.Per_Personal_Id + " Nombre del Store Procedure: " + "dbo.Apu_Proyecto_ByPersonal " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Proyectos.Apu_ProyectoRow fila in tabla)
          lista.Add(new Apu_Proyecto(
          
    fila.Id,
    fila.Codigo,
    fila.Nombre,
    fila.Estado,
    fila.Apu_Lugar_Id,
    fila.Fecha_Inicio,
    fila.Fecha_Final,
    fila.Numero_Contrato,
    fila.Referencia_Contrato,
    fila.Destino_Obra,
    fila.Int_Moneda_Id,
    fila.Int_Sucursal_Id,
    fila.Apu_Tipo_Proyecto_Id,
    fila.Int_Partida_Presupuestaria_Id,
    fila.Tipo,
    fila.Empresa_Contratada,
    fila.Espresa_Fiscalizadora,
    fila.Fecha_Creacion,
    fila.Creacion_Per_Personal_Id,
    fila.Fecha_Update,
    fila.Update_Per_Personal_Id,
    fila.Descripcion,
    fila.Apu_Lugar_Codigo,
    fila.Apu_Lugar_Nombre,
    fila.Apu_Provincia_Id,
    fila.Apu_Provincia_Nombre,
    fila.Int_Empresa_Id,
    fila.Int_Empresa_Codigo,
    fila.Int_Empresa_Nombre,
    fila.Int_Moneda_Simbolo,
    fila.Int_Partida_Presupuestaria_Valor,
    fila.Presupuesto_Costo,
    fila.Ejecucion_Costo,
    fila.Apu_Tipo_Proyecto_Codigo,
    fila.Apu_Tipo_Proyecto_Nombre,
    fila.Apu_Proyecto_Personal_Id,
    fila.Tipo_Nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
          #endregion
    #region Operaciones con datos
    
    //Inserta
    /// <summary>
    /// Inserta el objeto en la tabla Apu_Proyecto
    /// </summary>
    /// <param name="s">Variables de ámbito como la versión y la sucursal</param>
    // <returns></returns>
    public string Insert(Scope s, Apu_Proyecto o)
    {
    // Genera un nuevo Id, codigo y estado.
    o.GenNewId(s.Int_Sucursal_Numero);
    o.GenCodigo(s.Ver_Version_Id);
    o.GenEstado();
    // Controla el error de clave primaria duplicada.
    o.Int_Sucursal_Id = s.Int_Sucursal_Id;
    o.Creacion_Per_Personal_Id = s.Per_Personal_Id;
    o.Update_Per_Personal_Id = s.Per_Personal_Id;
    o.Fecha_Creacion = DateTime.Now;
    o.Fecha_Update = DateTime.Now;
    try
    {
    Adapter.Insert(
    
          o.Id,
          o.Codigo,
          o.Apu_Lugar_Id,
          o.Nombre,
          o.Fecha_Inicio,
          o.Fecha_Final,
          o.Numero_Contrato,
          o.Referencia_Contrato,
          o.Destino_Obra,
          o.Int_Moneda_Id,
          o.Int_Sucursal_Id,
          o.Apu_Tipo_Proyecto_Id,
          o.Int_Partida_Presupuestaria_Id,
          o.Tipo,
          o.Empresa_Contratada,
          o.Espresa_Fiscalizadora,
          o.Fecha_Creacion,
          o.Creacion_Per_Personal_Id,
          o.Fecha_Update,
          o.Update_Per_Personal_Id,
          o.Estado,
          o.Descripcion
    );
}
catch (SqlException e)
{
    Exception eCaso;
    Exception otroEX;
    switch (e.Number)
    {
        // Si el error es de violación PK, entonces repite.
        case 2627:
            string mensaje = e.Errors[0].Message;
            if (mensaje.StartsWith(
                   Textos._ERR_VIOLATION_UNIQUE_KEY)
                   )
                return Insert(s, o);
            else
            {
                if (e.Message.Contains(TXT_BDD._IX_Apu_Proyecto_Codigo))
                {
                    eCaso = new Exception("");
                    otroEX = new Exception(TXT_Mensajes._MSJ32, eCaso);
                    throw (otroEX);
                }

                eCaso = new Exception(e.Message);
                otroEX = new Exception(TXT_Mensajes._MSJ34, eCaso);
                throw (otroEX);
            }
            break;
        default:
            eCaso = new Exception(e.Message);
            otroEX = new Exception(TXT_Mensajes._MSJ34, eCaso);
            throw (otroEX);
    }
}
    //Control de Auditoria
    Auditar.Registro(s, o, Textos._AUDITAR_ACCION_INSERT);
    //Retorna el Id Insetado
     return o.Id;
    }
    // Borra
    /// <summary>
    /// Borra el objeto de la tabla Apu_Proyecto
    ///</summary>
     /// <param name="o">Objeto a actualizar</param>
    /// <returns></returns>
    public int Delete(Scope s,  Apu_Proyecto o)
    {
    int resultado = 0;
            try
            {
           resultado = Adapter.Delete(
    
          o.Id,
          o.Codigo,
          o.Apu_Lugar_Id,
          o.Nombre,
          o.Fecha_Inicio,
          o.Fecha_Final,
          o.Numero_Contrato,
          o.Referencia_Contrato,
          o.Destino_Obra,
          o.Int_Moneda_Id,
          o.Int_Sucursal_Id,
          o.Apu_Tipo_Proyecto_Id,
          o.Int_Partida_Presupuestaria_Id,
          o.Tipo,
          o.Empresa_Contratada,
          o.Espresa_Fiscalizadora,
          o.Fecha_Creacion,
          o.Creacion_Per_Personal_Id,
          o.Fecha_Update,
          o.Update_Per_Personal_Id,
          o.Estado,
          o.Descripcion
    );
       }
       catch (SqlException e)
       {
           Exception eCaso;
           Exception otroEX;

           eCaso = new Exception(e.Message);
           otroEX = new Exception(TXT_Mensajes._MSJ34, eCaso);
           throw (otroEX);
       }
    Auditar.Registro(s, o, Textos._AUDITAR_ACCION_DELETE);
    return resultado;
    }//Actualiza
    /// <summary>
    //Actualiza la tabla Apu_Proyecto
    /// </summary>
    /// <param name="o">Objeto que contiene la información a actualizar</param>
    /// <param name="original">Original para concurrencia optimista</param> 
    /// <returns></returns>
    public int Update(Scope s, Apu_Proyecto o, Apu_Proyecto original)
    {
     o.Int_Sucursal_Id = s.Int_Sucursal_Id;
        o.Creacion_Per_Personal_Id = s.Per_Personal_Id;
        o.Update_Per_Personal_Id = s.Per_Personal_Id;

   int resultado = 0;
            try
            {
                resultado = Adapter.Update(
    
          o.Id,
          o.Codigo,
          o.Apu_Lugar_Id,
          o.Nombre,
          o.Fecha_Inicio,
          o.Fecha_Final,
          o.Numero_Contrato,
          o.Referencia_Contrato,
          o.Destino_Obra,
          o.Int_Moneda_Id,
          o.Int_Sucursal_Id,
          o.Apu_Tipo_Proyecto_Id,
          o.Int_Partida_Presupuestaria_Id,
          o.Tipo,
          o.Empresa_Contratada,
          o.Espresa_Fiscalizadora,
          o.Fecha_Creacion,
          o.Creacion_Per_Personal_Id,
          o.Fecha_Update,
          o.Update_Per_Personal_Id,
          o.Estado,
          o.Descripcion,
          original.Id,
          original.Codigo,
          original.Apu_Lugar_Id,
          original.Nombre,
          original.Fecha_Inicio,
          original.Fecha_Final,
          original.Numero_Contrato,
          original.Referencia_Contrato,
          original.Destino_Obra,
          original.Int_Moneda_Id,
          original.Int_Sucursal_Id,
          original.Apu_Tipo_Proyecto_Id,
          original.Int_Partida_Presupuestaria_Id,
          original.Tipo,
          original.Empresa_Contratada,
          original.Espresa_Fiscalizadora,
          original.Fecha_Creacion,
          original.Creacion_Per_Personal_Id,
          original.Fecha_Update,
          original.Update_Per_Personal_Id,
          original.Estado,
          original.Descripcion
    
    );
            }
            catch (SqlException e)
            {
                Exception eCaso;
                Exception otroEX;
                if (e.Message.Contains(TXT_BDD._IX_Apu_Proyecto_Codigo))
                {
                    eCaso = new Exception("");
                    otroEX = new Exception(TXT_Mensajes._MSJ32, eCaso);
                    throw (otroEX);
                }

                eCaso = new Exception(e.Message);
                otroEX = new Exception(TXT_Mensajes._MSJ34, eCaso);
                throw (otroEX);
            }
    Auditar.Registro(s, o, Textos._AUDITAR_ACCION_UPDATE);
    return resultado;
    }
    #endregion
    }
    }
